package com.example.app;

import com.example.config.SpringConfig32;
import com.example.config.SpringConfig33;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App33 {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig33.class);
//        获取beanDefinitionNames
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
//        我们发现如果没有给bean一个id spring会自动创建一个
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
        System.out.println("=====================");
//
        SpringConfig33 springConfig33 = applicationContext.getBean("springConfig33", SpringConfig33.class);
//        如果proxyBeanMethods 属性为true 那么就算返回的是new一个对象但是还是同一个对象  如果属性为FALSE 那么就不是同一个对象(bean注解修饰的方法)
//        是因为如果为true那么得到的SpringConfig33对象 为其增强的动态代理类 如果为false那就是原始对象
//        动态代理类调用方法每次返回的都是Spring中同一个对象
//        但是原始对象就是new一个新的对象
//        注意两点 1. 需要Configuration注解中的proxyBeanMethods属性并设置为true 2. 需要给方法设置Bean注解
        System.out.println(springConfig33.cat());
        System.out.println(springConfig33.cat());
        System.out.println(springConfig33.cat());

    }
}
